const ajax = require('../../tool/ajax');
const screen = require('./screen');//截图
let page, config;

/**
 * 开庭时间及地点脚本
 * @param pupConfig 框架基础配置信息
 * @param type 类型，0代表初次开庭，1代表再次开庭，默认为0。
 */
const start = async (pupConfig, type = 0) => {
  page = pupConfig.page;
  config = pupConfig.config;

  //等待加载
  await page.waitFor('.ant-modal-body');
  await page.waitFor(300);
  let timePlace = type === 0 ? config.tribunal.courtTime : config.court.courtAgain;

  /**
   * 选择日期
   */
  let inputs = await page.$$('.ant-modal-body  input');
  await selectDate(inputs[0], timePlace);
  await selectTime(inputs[1], timePlace);
  //选择开庭地点
  if (type == 0 && config.tribunal.secretary.hearWays === 2) {
    await inputs[2].type(timePlace.place);
  }

  await screen(page, '选择开庭时间');

  await page.click('.ant-modal-footer button.ant-btn-primary');
  await ajax.waitForResponse(pupConfig.page, 'confirmCourtNotification.do');
}

/**
 * 选择开庭日期
 * @param element 日期组件
 * @param timePlace 开庭时间及地点
 * {
    date: '2018年12月12日',//再次开庭日期,格式：'2018年12月12日'
    time: '14:12',//再次开庭时间，格式：'14:12'
    place:'深圳市南山区001号',//再次开庭地点
   }
 */
const selectDate = async (element, timePlace) => {
  //点击日期弹框
  await element.click();
  await page.waitFor(500);
  //如果配置文件中没有设置日期，就选今天
  if (timePlace.date) {
    await page.click(`tbody tr td[title="${timePlace.date}"]`);
  } else {
    await page.click(`.ant-calendar-footer span`);
  }
}

/**
 * 选择开庭时间
 * @param element 日期组件
 * @param timePlace 开庭时间及地点,参数同上
 */
const selectTime = async (element, timePlace) => {
  //点击时间弹框
  await element.click();
  await page.waitFor(500);
  //如果配置文件中没有设置时间，就选2分钟后的时间
  if (!timePlace.time) {
    timePlace.time = getTime(1000 * 60 * 2);
  }
  let selectTimes = timePlace.time.split(':');
  let times = await page.$$('div.ant-time-picker-panel-select ul li');
  //时针对应的下标
  let firstTime = parseInt(selectTimes[0]);
  //分针对应的下标
  let secondTime = 24 + parseInt(selectTimes[1]);
  await times[firstTime].click();
  await times[secondTime].click();
}

/**
 * 获取指定毫秒后的时间
 * @param m 多少毫秒以后
 */
function getTime(m) {
  let ms = new Date().getTime();
  let newDate = new Date(ms + m);
  return newDate.getHours() + ':' + newDate.getMinutes();
}

module.exports = start;